﻿Imports Proyecto_PAVI_Academia.AccesoBD
Public Class frm_ABM_Profesores
    
    Enum estado
        insertar
        modificar
        borrar
    End Enum
    Enum estadosTitulo
        insertar
        modificar
        eliminar
    End Enum
    Enum estadoformulario
        load
        nuevo
        modificar
        eliminar
        cancelar
        guardar
    End Enum
    Dim _accionTitulo As estadosTitulo = estadosTitulo.insertar
    Dim _accesoBD As New AccesoBD
    'NO SE USA EN NINGUN LADO
    ' Dim _dataTableTtulos As New DataTable
    Dim _accion As estado = estado.insertar
    Dim id_titulo As Integer
    Dim _accionFormulario As estadoformulario
    'USAMOS ESTA VARIABLE INTERNA PARA NO DEPENDER DEL TXT_LEGAJO, QUE HABIA ANTES
    Dim legajoProfesor As Integer
    ' USAMOS ESTOS TRES VECTORES, PARA ALMACENAR LOS ID QUE SON NUEVOS, MODIFICADOS O ELIMINADOS
    Dim nuevos As Integer
    Dim titulos_nuevos() As String
    Dim modificados As Integer
    Dim titulos_modificados() As String
    Dim eliminados As Integer
    Dim titulos_eliminados() As String

    Private Sub limpiar_campos()
        Dim miControl As Object
        For Each miControl In Me.panel_datos.Controls
            If miControl.GetType Is GetType(System.Windows.Forms.TextBox) Then
                miControl.Clear()
            End If
            If miControl.GetType Is GetType(System.Windows.Forms.ComboBox) Then
                miControl.SelectedValue = -1
            End If
            If miControl.GetType Is GetType(System.Windows.Forms.MaskedTextBox) Then
                miControl.Clear()
            End If
            System.Windows.Forms.Application.DoEvents()
        Next
        'YA ESTA HECHO DENTRO DEL FOR EACH!
        cmb_titulo.SelectedValue = -1
        grid_titulo.Rows.Clear()
    End Sub
    Private Sub manejoDeControles()
        If _accionFormulario = estadoformulario.load Then
            panel_datos.Enabled = False
            btn_aceptar.Enabled = False
            btnCancelar.Enabled = False
            cmd_nuevo.Enabled = True
            'btn_agregar.Enabled = False
            txt_fecha_egreso.Enabled = False
            Me.ContextMenuStrip2.Enabled = False
            txt_busq_nombre.Focus()

        End If
        If _accionFormulario = estadoformulario.nuevo Then
            limpiar_campos()
            panel_datos.Enabled = True
            btn_aceptar.Enabled = True
            btnCancelar.Enabled = True
            cmd_nuevo.Enabled = False
            txt_nombre.Focus()
        End If
        If _accionFormulario = estadoformulario.modificar Then
            limpiar_campos()
            panel_datos.Enabled = True
            btn_aceptar.Enabled = True
            btnCancelar.Enabled = True
            cmd_nuevo.Enabled = False
            txt_nombre.Focus()
            Me.ContextMenuStrip2.Enabled = True
            txt_fecha_egreso.Enabled = True


        End If
        If _accionFormulario = estadoformulario.eliminar Then
            panel_datos.Enabled = False
            btn_aceptar.Enabled = True
            btnCancelar.Enabled = True
            cmd_nuevo.Enabled = False
            btn_aceptar.Focus()
        End If
        If _accionFormulario = estadoformulario.cancelar Then
            panel_datos.Enabled = False
            btn_aceptar.Enabled = False
            btnCancelar.Enabled = False
            cmd_nuevo.Enabled = True
            limpiar_campos()
            panel_datos.Enabled = False
        End If
        If _accionFormulario = estadoformulario.guardar Then
            panel_datos.Enabled = False
            btn_aceptar.Enabled = False
            cmd_nuevo.Enabled = True
            btnCancelar.Enabled = False
            Me.ContextMenuStrip2.Enabled = False
            txt_fecha_egreso.Enabled = False
            cmd_nuevo.Focus()
        End If
    End Sub
    Private Sub frm_profesores_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        _accionFormulario = estadoformulario.load
        cargo_tabla_profesores()
        'SOLAMENTE EN EL LOAD SE CARGAN LOS COMBOS, PORQUE SE HACE UNA SOLA VEZ
        cargoCombos()
        ' NO SE USA EN NINGUN LADO
        '_dataTableTtulos = _accesoBD.devuelveTabla("Titulos")
      
    End Sub

    Private Sub cargoCombos()
        _accesoBD.load_combo(cmb_tipo_documento, _accesoBD.devuelveTabla("TipoDocumento"), "idTipoDoc", "descripcion")
        _accesoBD.load_combo(cmb_titulo, _accesoBD.devuelveTabla("Titulos"), "idTitulo", "descripcion")
    End Sub
    Private Sub txt_fecha_ingreso_Validated(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_fecha_ingreso.Validated
        If sender.text = "  /  /" Then
            Exit Sub
        End If

        If IsDate(sender.text) Then
            If Not sender.text = Format(CDate(sender.text), "dd/mm/yyyy") Then
            Else
                MessageBox.Show("Fecha Invalida", "Atencion", MessageBoxButtons.OK, MessageBoxIcon.Error)
                sender.Focus()
                Exit Sub
            End If
        Else
            MessageBox.Show("Fecha invalida", "Atencion", MessageBoxButtons.OK, MessageBoxIcon.Error)
            sender.Focus()
            Exit Sub
        End If
    End Sub
    Private Sub cmd_nuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_nuevo.Click
        _accionFormulario = estadoformulario.nuevo
        manejoDeControles()
        ' cargoCombos() NO LOS TIENE QUE CARGAR DE NUEVO, SOLO SETEAR LOS SELECTED VALUES, EN LIMPIAR CAMPOS
        _accion = estado.insertar
        Me.iniciarVectoresYContadores()
    End Sub
    Private Function validar() As Boolean
        If grid_titulo.Rows.Count <= 0 Then
            MessageBox.Show("El profesor debe tener al menos un título", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Me.cmb_titulo.Focus()
            Return False
            Exit Function
        End If
        If txt_nombre.Text = "" Then
            MessageBox.Show("Ingrese el nombre del docente", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Me.txt_nombre.Focus()
            Return False
            Exit Function
        End If

        If txt_apellido.Text = "" Then
            MessageBox.Show("Ingrese el apellido del docente", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Me.txt_apellido.Focus()
            Return False
            Exit Function
        End If

        If cmb_tipo_documento.SelectedValue = -1 Then
            MessageBox.Show("Ingrese el tipo de documento", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Me.cmb_tipo_documento.Focus()
            Return False
            Exit Function
        End If

        If txt_documento.Text = "" Then
            MessageBox.Show("Ingrese el documento", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Me.txt_documento.Focus()
            Return False
            Exit Function
        End If
        If txt_documento.Text.Length > 8 Then
            MessageBox.Show("El documento no puede tener mas de 8 cifras", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Me.txt_documento.Focus()
            Return False
            Exit Function
        Else ' si cumple con el formato, de paso me fijo si esta cargado, salvo que sea una modificacion
            If _accion = estado.insertar Then
                'Dim tabla = _accesoBD.ejecutaSQL("select * from Profesores where documento=" & txt_documento.Text)
                Dim tabla = _accesoBD.devolverTransaccion("select * from Profesores where documento=" & txt_documento.Text & "and estado=0")
                If tabla.Rows.Count <> 0 Then
                    MessageBox.Show("El documento ya esta cargado", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                    Me.txt_documento.Focus()
                    Return False
                    Exit Function
                End If
            End If
        End If

        Dim fecha_ing As Date
        Dim fecha_eg As Date
        Dim fechaIngValida As Boolean = Date.TryParse(txt_fecha_ingreso.Text, fecha_ing)


        If Not fechaIngValida Then
            MessageBox.Show("Ingrese una fecha de ingreso válida", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Me.txt_fecha_ingreso.Focus()
            Return False
            Exit Function
        End If
        ' LA FECHA DE EGRESO SI PUEDE SER NULA! Si lo estamos dando de alta, no lo vamos a echar ahi nomas
        ' Hay que leer el dominio y las tablas antes de programar!
        If txt_fecha_egreso.Text <> "  /  /" Then
            If (IsDate(txt_fecha_egreso.Text)) = False Then
                MessageBox.Show("Ingrese una fecha de egreso válida", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                txt_fecha_egreso.Focus()
                Return False
                Exit Function
            End If
        End If

        If txt_fecha_egreso.Text <> "  /  /" Then
            Dim diffFechas As Long = DateAndTime.DateDiff(DateInterval.DayOfYear, fecha_ing, fecha_eg)
            If diffFechas > 0 Then
                MessageBox.Show("La fecha de ingreso no puede ser mayor que la fecha de egreso", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                Me.txt_fecha_ingreso.Focus()
                Return False
                Exit Function
            End If
        End If
        If DateTime.Compare(DateTime.Parse(txt_fecha_ingreso.Text), DateTime.Now.Date) > 0 Then
            If _accion = estado.insertar Then
                MessageBox.Show("La fecha de ingreso no puede ser mayor a la de hoy", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                Me.txt_fecha_ingreso.Focus()
                Return False
                Exit Function
            End If
        End If
        If txt_fecha_egreso.Text <> "  /  /" Then
            If DateTime.Compare(DateTime.Parse(txt_fecha_egreso.Text), DateTime.Now.Date) < 0 Then
                If _accion = estado.insertar Then
                    MessageBox.Show("La fecha de egreso no puede ser menor a la de hoy", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                    Me.txt_fecha_egreso.Focus()
                    Return False
                    Exit Function
                End If
            End If
        End If
        Return True
        '//////////// 
    End Function
    Private Sub insertar_profesores()
        Dim consulta As String = ""

        consulta = "INSERT INTO Profesores ("
        consulta &= "apellido, nombre, idTipoDoc, documento, fechaIngreso) "
        consulta &= "VALUES ('" & Me.txt_apellido.Text & "'"
        consulta &= ", '" & Me.txt_nombre.Text & "'"
        consulta &= ", " & Me.cmb_tipo_documento.SelectedValue
        consulta &= ", " & Me.txt_documento.Text
        consulta &= ", '" & Convert.ToDateTime(Me.txt_fecha_ingreso.Text) & "')"

        '_accesoBD._insertar(consulta)
        _accesoBD.ejecutarTransaccion(consulta)

        ' VAMOS A VER SI ESTO FUNCAAAAA!!!!!!
        '//// ahora busco el id que se acaba de generar y con eso seteo me.legajoProfesor
        Dim tabla = _accesoBD.devolverTransaccion("select max(legajoProfesor) as legajo from Profesores")
        If tabla.Rows.Count > 0 Then
            Me.legajoProfesor = tabla.Rows(0)("legajo")
        Else
            Me.legajoProfesor = 1
        End If


    End Sub
    Private Sub actualizarTítulos()
        'voy recorriendo la grilla a ver que hay
        For Each fila As DataGridViewRow In grid_titulo.Rows
            Dim cantidad = grid_titulo.Rows.Count
            Dim fecha = fila.Cells.Item(2).Value

            ' guardo en una variable aux el id de
            Dim id_aux = fila.Cells.Item(0).Value
            'ahora me fijo en cual de los tres vectores se guardó ese id, por eso tengo q recorrer los tres

            For c = 0 To titulos_nuevos.Length - 1
                If Me.titulos_nuevos(c) = Nothing Then
                    Exit For
                End If
                If Me.titulos_nuevos(c) = id_aux Then
                    'inserto un titulo
                    Me.insertarTitulos(id_aux, fecha)
                    Exit For
                End If
            Next

            For c = 0 To titulos_modificados.Length - 1
                If Me.titulos_modificados(c) = Nothing Then
                    Exit For
                End If
                If Me.titulos_modificados(c) = id_aux Then
                    modificarTítulos(id_aux, fecha)
                    Exit For
                End If
            Next

        Next
        ' los eliminados, ya no estan en la grilla, por eso van fuera del for each que la recorre
        ' me fijo si hay alguno para borrar, y si hay, lo borro
        For c = 0 To titulos_eliminados.Length - 1
            If Me.titulos_eliminados(c) = Nothing Then
                Exit For
            End If
            If Me.titulos_eliminados(c) <> Nothing Then
                borrarTitulos(Me.titulos_eliminados(c))
                Exit For
            End If
        Next
        '        cargarGrillaTitulos(Me.legajoProfesor)
    End Sub
    Private Sub insertarTitulos(ByVal id As String, ByVal fecha As String)

        Dim consulta As String = ""
        consulta = "INSERT INTO TitulosXProfesor ("
        consulta &= "LegajoProfesor, idTitulo, fechaObtencion) "
        consulta &= "VALUES (" & Me.legajoProfesor
        consulta &= ", " & id
        consulta &= ", '" & fecha & "')"
        '_accesoBD._insertar(consulta)
        _accesoBD.ejecutarTransaccion(consulta)

    End Sub
    '///////////////// NO TIENE QUE HACER DELETE! Se tiene que setear el estado en 1 //////////////////////
    Private Sub borrarProfesor()
        Dim comando As String
        comando = "update Profesores set estado=1 where legajoProfesor=" & Me.legajoProfesor
        _accesoBD._eliminar(comando)
        cargo_tabla_profesores()
    End Sub
    Private Sub borrarTitulos(ByVal id As String)
        Dim consulta = "delete TitulosXProfesor where idTitulo=" & id & " and legajoProfesor=" & Me.legajoProfesor
        '_accesoBD._eliminar(consulta)
        _accesoBD.ejecutarTransaccion(consulta)
    End Sub
    Private Sub modificarProfesores()
        Dim modificacion As String

        modificacion = "UPDATE Profesores "
        modificacion &= "SET apellido = '" & Me.txt_apellido.Text & "'"
        modificacion &= ", nombre = '" & Me.txt_nombre.Text & "'"
        modificacion &= ", idTipoDoc = " & Me.cmb_tipo_documento.SelectedValue
        modificacion &= ", documento = " & Me.txt_documento.Text
        modificacion &= ", fechaIngreso = '" & Convert.ToDateTime(Me.txt_fecha_ingreso.Text) & "'"
        If txt_fecha_egreso.Text <> "  /  /" Then
            modificacion &= ", fechaEgreso = '" & Convert.ToDateTime(Me.txt_fecha_egreso.Text) & "'"
        Else
            modificacion &= ", fechaEgreso= null"
        End If

        modificacion &= " WHERE legajoProfesor = " & Me.legajoProfesor

        ' _accesoBD._modificar(modificacion)
        _accesoBD.ejecutarTransaccion(modificacion)

    End Sub
    Private Sub modificarTítulos(ByVal id As String, ByVal fecha As String)
        '/////////////////// NO SE ME OCURRE OTRA FORMA DE MODIFICAR TODO SALVO BORRANDO Y VOLVIENDO A CARGAR ///
        Dim consulta = "update TitulosXProfesor set fechaObtencion='" & fecha
        consulta &= "' where legajoProfesor=" & Me.legajoProfesor & " and idTitulo=" & id
        '_accesoBD._modificar(consulta)
        _accesoBD.ejecutarTransaccion(consulta)

    End Sub
    Private Sub cargo_tabla_profesores()
        Dim consulta As String = ""
        Dim tabla As New Data.DataTable

        consulta = "SELECT Profesores.legajoProfesor, Profesores.apellido, Profesores.nombre, TipoDocumento.descripcion, Profesores.documento"
        consulta &= " FROM Profesores INNER JOIN"
        consulta &= " TipoDocumento ON Profesores.idTipoDoc = TipoDocumento.idTipoDoc"
        consulta &= " WHERE Profesores.estado = 0"
        'ACA CONTROLO LOS PARAMETROS DE BUSQUEDA
        If txt_busq_apellido.Text <> "" Then
            consulta &= " and Profesores.apellido like '" & Me.txt_busq_apellido.Text & "'"
        End If
        If txt_busq_nombre.Text <> "" Then
            consulta &= " and Profesores.nombre like '" & Me.txt_busq_nombre.Text & "'"
        End If

        tabla = _accesoBD.ejecutaSQL(consulta)

        grid_profesores.Rows.Clear()
        Dim c As Integer
        For c = 0 To tabla.Rows.Count - 1
            Me.grid_profesores.Rows.Add(tabla.Rows(c)("legajoProfesor"), tabla.Rows(c)("nombre"), tabla.Rows(c)("apellido"), tabla.Rows(c)("descripcion"), tabla.Rows(c)("documento"))
        Next
        grid_profesores.ClearSelection()
    End Sub
    Private Sub btn_aceptar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_aceptar.Click
        If _accion = estado.insertar Then
            _accesoBD.iniciarTransaccion()
            If validar() Then
                If MessageBox.Show("¿Desea confirmar la operación?", "Agregar profesor", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
                    '_accesoBD.iniciarTransaccion()
                    insertar_profesores()
                    actualizarTítulos()
                    _accesoBD.finalizarTransaccion()
                    cargarGrillaTitulos(Me.legajoProfesor)
                End If
                limpiarVectoresyContadores()
                _accionFormulario = estadoformulario.guardar
                manejoDeControles()
            End If
        End If
        If Me._accion = estado.modificar Then
            _accesoBD.iniciarTransaccion()
            If validar() Then
                If MessageBox.Show("¿Desea confirmar la operación?", "Modificar profesor", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
                    '_accesoBD.iniciarTransaccion()
                    modificarProfesores()
                    ' PORQUE EN UNA MODIFICACION PUEDEN SUCEDER LAS TRES COSAS
                    actualizarTítulos()
                    _accesoBD.finalizarTransaccion()
                    cargarGrillaTitulos(Me.legajoProfesor)
                    Me.txt_fecha_egreso.Enabled = False
                End If
                limpiarVectoresyContadores()
                _accionFormulario = estadoformulario.guardar
                manejoDeControles()
            End If
        End If
        If _accion = estado.borrar Then

            borrarProfesor()
            ' ACA NO BORRO LOS TITULOS SIMPLEMENTE PORQUE EL PROFESOR DEJA DE APARECER PARA EL PROGRAMA
            limpiarVectoresyContadores()
            _accionFormulario = estadoformulario.guardar
            manejoDeControles()
        End If
            cargo_tabla_profesores()

    End Sub
    
    Private Sub cmd_salir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_salir.Click
        Me.Close()
    End Sub
    Private Sub mtb_documento_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
        Select Case Asc(e.KeyChar)
            Case 4, 24, 4, 19, 127, 13, 9, 15, 14
                Exit Sub
        End Select
        If IsNumeric(e.KeyChar) = False Then
            MessageBox.Show("Este caracter no es un número ( " + e.KeyChar + " )", "Importante", MessageBoxButtons.OK, MessageBoxIcon.Error)
            e.KeyChar = ""
        End If
    End Sub
    Private Sub txt_documento_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
        Select Case Asc(e.KeyChar)
            Case 4, 24, 19, 127, 13, 9, 15, 14, 8
                Exit Sub
        End Select
        If IsNumeric(e.KeyChar) = False Then
            MessageBox.Show("Este caracter no es un número ( " + e.KeyChar + " )", "Importante", MessageBoxButtons.OK, MessageBoxIcon.Error)
            e.KeyChar = ""
        End If
    End Sub
    Private Function validarExistenciaTitulo(ByVal c As String) As Boolean
        Dim bandera As Boolean
        bandera = False
        For i = 0 To grid_titulo.Rows.Count - 1
            If grid_titulo.Rows(i).Cells(1).Value = c Then
                bandera = True
            End If
        Next
        Return bandera
    End Function
    Private Function validarFechaObtencion() As Boolean
        If DateTime.Compare(DateTime.Parse(dtp_fecha_obtencion.Value).Date, DateTime.Now.Date) > 0 Then
            MessageBox.Show("La fecha de obtención del título no puede ser mayor a la de hoy", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Return False
            Exit Function
            dtp_fecha_obtencion.Focus()
        End If
        Return True
    End Function
    ' ESTE BOTON SOLO CONTROLA LA GRILLA, NO CARGA NADA EN LAS TABLAS
    Private Sub btn_agregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_agregar.Click

        If _accionTitulo = estadosTitulo.insertar Then
            If cmb_titulo.SelectedValue <> -1 Then
                If validarExistenciaTitulo(cmb_titulo.Text) Then
                    MessageBox.Show("El titulo ya se encuentra en la tabla", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                Else
                    If validarFechaObtencion() = True Then
                        grid_titulo.Rows.Add(cmb_titulo.SelectedValue, cmb_titulo.Text, FormatDateTime(dtp_fecha_obtencion.Value.Date.ToString))
                        Me.cargarNuevos(cmb_titulo.SelectedValue)
                        cmb_titulo.SelectedValue = -1
                        dtp_fecha_obtencion.Value = Date.Now
                    End If
                End If
            Else
                MessageBox.Show("Debe seleccionar un titulo", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End If
        End If
        If _accionTitulo = estadosTitulo.modificar Then
            If validarFechaObtencion() Then
                Dim fila = grid_titulo.SelectedRows(0)
                grid_titulo.CurrentRow.Cells(2).Value = dtp_fecha_obtencion.Value.ToShortDateString
                'se cargan para las modificaciones, porque si es un nuevo Profesor, me va a querer 
                'modificar cosas que no existen
                If _accion = estado.modificar Then
                    Me.cargarModificados(Me.id_titulo)
                End If
                cmb_titulo.SelectedValue = -1
                dtp_fecha_obtencion.Value = Date.Now
            End If
        End If
        If _accionTitulo = estadosTitulo.eliminar Then
            Dim fila = grid_titulo.SelectedRows(0)
            Me.grid_titulo.Rows.Remove(fila)
            'se cargan para las modificaciones, porque si es un nuevo Profesor, me va a querer 
            'eliminar cosas que no existen
            If _accion = estado.modificar Then
                Me.cargarEliminados(Me.id_titulo)
            End If
        End If
        _accionTitulo = estadosTitulo.insertar

    End Sub
    Private Sub cargarNuevos(ByVal id As String)
        Me.titulos_nuevos(nuevos) = id
        nuevos = nuevos + 1
    End Sub
    Private Sub mtb_fecha_egreso_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles txt_fecha_egreso.Validated, txt_fecha_ingreso.Validated
        If sender.text = "  /  /" Then
            Exit Sub
        End If

        If IsDate(sender.text) Then
            If Not sender.text = Format(CDate(sender.text), "dd/mm/yyyy") Then
            Else
                MessageBox.Show("Fecha Invalida", "Atencion", MessageBoxButtons.OK, MessageBoxIcon.Error)
                sender.Focus()
                Exit Sub
            End If
        Else
            MessageBox.Show("Fecha invalida", "Atencion", MessageBoxButtons.OK, MessageBoxIcon.Error)
            sender.Focus()
            Exit Sub
        End If
    End Sub


    Private Sub ModificarToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ModificarToolStripMenuItem.Click
        _accionFormulario = estadoformulario.modificar
        manejoDeControles()
        Me.legajoProfesor = Me.grid_profesores.CurrentRow.Cells("col_legajo").Value
        'cargoCombos() NO VA!
        cargarProfesor()
        Me._accion = estado.modificar
        iniciarVectoresYContadores()
    End Sub
    Private Function profesorEstaEnCurso() As Boolean
        'PARA VER SI EL PROFESOR NO ESTA A CARGO DE UN CURSO HABILITADO
        Dim comando = "select * from Cursos where legajoProfesor=" & Me.legajoProfesor & " and estado=0"
        Dim tabla = _accesoBD.ejecutaSQL(comando)
        If tabla.Rows.Count = 0 Then
            Return False
        Else
            Return True
        End If
    End Function
    Private Sub EliminarToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EliminarToolStripMenuItem.Click
        _accionFormulario = estadoformulario.eliminar
        manejoDeControles()
        If profesorEstaEnCurso() Then
            MsgBox("El profesor no puede ser eliminado porque esta asignado a un curso")
        Else
            If MessageBox.Show("¿Desea confirmar la operación?", "Eliminar", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
                _accion = estado.borrar
                Dim fila As DataGridViewRow = grid_profesores.CurrentRow
                Dim legajo As Integer = Integer.Parse(fila.Cells("col_legajo").Value)
                cargarProfesor()
            End If
        End If
    End Sub

    Private Sub btn_refrescar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_refrescar.Click
        Me.cargo_tabla_profesores()
        _accionFormulario = estadoformulario.load
        manejoDeControles()
        grid_titulo.Rows.Clear()
    End Sub

    Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelar.Click
        _accionFormulario = estadoformulario.cancelar
        manejoDeControles()
    End Sub

    Private Sub grid_profesores_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles grid_profesores.CellClick

        Me.legajoProfesor = Me.grid_profesores.CurrentRow.Cells("col_legajo").Value
        'cargoCombos() NO VA
        cargarProfesor()
        Me._accion = estado.modificar

    End Sub

    Private Sub cargarProfesor()
        Dim consulta As String = "select * from Profesores where legajoProfesor=" & Me.legajoProfesor
        Dim tabla As Data.DataTable = _accesoBD.ejecutaSQL(consulta)
        Me.txt_apellido.Text = tabla.Rows(0)("apellido")
        Me.txt_nombre.Text = tabla.Rows(0)("nombre")
        Me.cmb_tipo_documento.SelectedValue = tabla.Rows(0)("idTipoDoc")
        Me.txt_documento.Text = tabla.Rows(0)("documento")
        Me.txt_fecha_ingreso.Text = tabla.Rows(0)("fechaIngreso")
        ' HAY QUE CONTROLAR SI LA FECHA DE EGRESO ES NULA O NO PARA CARGARLA
        If Not IsDBNull(tabla.Rows(0)("fechaEgreso")) Then
            Me.txt_fecha_egreso.Text = tabla.Rows(0)("fechaEgreso")
        End If
        Me.cargarGrillaTitulos(Me.legajoProfesor)
    End Sub
    Private Sub cargarGrillaTitulos(ByVal legajo As String)
        Dim consultaTitulos As String = "SELECT Titulos.idTitulo,descripcion ,fechaObtencion FROM TitulosXProfesor JOIN Titulos ON TitulosXProfesor.idTitulo=Titulos.idTitulo WHERE legajoProfesor=" & legajo & " order by descripcion"
        Dim resultadoTitulos As Data.DataTable = _accesoBD.ejecutaSQL(consultaTitulos)
        grid_titulo.Rows.Clear()
        For index = 0 To resultadoTitulos.Rows.Count - 1
            grid_titulo.Rows.Add(resultadoTitulos(index)("idTitulo"), resultadoTitulos(index)("descripcion"), resultadoTitulos(index)("fechaObtencion"))
        Next
        grid_titulo.ClearSelection()
    End Sub
    Private Sub btn_busq_nombre_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_busq_nombre.Click
        ' ///////////////// NO HACE FALTA ESTE CHORIZO, SE REUSA EL CODIGO DE CARGO_TABLA_PROFESORES ////////////

        'If String.IsNullOrWhiteSpace(Me.txt_busq_nombre.Text) And String.IsNullOrWhiteSpace(Me.txt_busq_apellido.Text) Then
        cargo_tabla_profesores()

        '    Dim consulta As String
        '    Dim tabla As New DataTable
        '    consulta = "SELECT Profesores.legajoProfesor, Profesores.apellido, Profesores.nombre, TipoDocumento.descripcion, Profesores.documento"
        '    consulta &= " FROM Profesores INNER JOIN"
        '    consulta &= " TipoDocumento ON Profesores.idTipoDoc = TipoDocumento.idTipoDoc"
        '    consulta &= " WHERE nombre LIKE '" & Me.txt_busq_nombre.Text & "'"
        '    consulta &= " OR apellido LIKE '" & Me.txt_busq_apellido.Text & "'"

        '    tabla = _accesoBD.ejecutaSQL(consulta)

        '    Me.grid_profesores.Rows.Clear()

        '    Dim c As Integer = 0

        '    For c = 0 To tabla.Rows.Count - 1
        '        Me.grid_profesores.Rows.Add(tabla.Rows(c)("legajoProfesor"), tabla.Rows(c)("nombre"), tabla.Rows(c)("apellido"), tabla.Rows(c)("descripcion"), tabla.Rows(c)("documento"))
        '    Next
        'End If
        txt_busq_apellido.Text = ""
        txt_busq_nombre.Text = ""
    End Sub

    Private Sub solo_letras_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txt_nombre.KeyPress, txt_busq_apellido.KeyPress, btn_busq_nombre.KeyPress, txt_apellido.KeyPress
        If Char.IsLetter(e.KeyChar) = False And (e.KeyChar = ChrW(Keys.Back)) = False Then
            MsgBox("Ingrese solo letras!")
            e.KeyChar = ""
        End If

    End Sub

    Private Sub solo_numeros_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txt_documento.KeyPress
        If Char.IsNumber(e.KeyChar) = False And (e.KeyChar = ChrW(Keys.Back)) = False Then
            MsgBox("Ingrese solo numeros!")
            e.KeyChar = ""
        End If
    End Sub
    'modifica los títulos
    Private Sub ModificarToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ModificarToolStripMenuItem1.Click
        _accionTitulo = estadosTitulo.modificar
        Me.id_titulo = grid_titulo.Item("col_id", grid_titulo.SelectedRows(0).Index).Value
        Me.cmb_titulo.SelectedValue = Me.id_titulo
        Me.dtp_fecha_obtencion.Value = grid_titulo.Item("col_fecha", grid_titulo.SelectedRows(0).Index).Value
        Me.dtp_fecha_obtencion.Focus()

    End Sub
    'este metodo me carga el vector de todos los titulos a modificar
    Private Sub cargarModificados(ByVal id As String)
        Me.titulos_modificados(modificados) = id
        Me.modificados = modificados + 1
    End Sub
    'elimina los titulos
    Private Sub EliminarToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EliminarToolStripMenuItem1.Click
        If MessageBox.Show("Esta seguro que desea eliminar el registro?!", "Eliminar", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
            _accionTitulo = estadosTitulo.eliminar
             Me.id_titulo = grid_titulo.Item("col_id", grid_titulo.SelectedRows(0).Index).Value
            Me.btn_agregar.Focus()
        End If
    End Sub
    Private Sub cargarEliminados(ByVal id As String)
        Me.titulos_eliminados(eliminados) = id
        eliminados = eliminados + 1
    End Sub
    Private Sub limpiarVectoresyContadores()
        Dim c As Integer

        If titulos_nuevos.Length <> -1 Then
            For c = 0 To titulos_nuevos.Length - 1
                titulos_nuevos(c) = Nothing
            Next
        End If
        nuevos = 0
        If titulos_modificados.Length <> -1 Then
            For c = 0 To titulos_modificados.Length - 1
                titulos_modificados(c) = Nothing
            Next
        End If
        modificados = 0

        If titulos_eliminados.Length = -1 Then
            For c = 0 To titulos_eliminados.Length - 1
                titulos_eliminados(c) = Nothing
            Next
        End If
        eliminados = 0
    End Sub
    Private Sub iniciarVectoresYContadores()
        nuevos = 0
        ReDim titulos_nuevos(4)
        modificados = 0
        ReDim titulos_modificados(4)
        eliminados = 0
        ReDim titulos_eliminados(4)
    End Sub

    'Private Sub cmb_titulo_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmb_titulo.SelectedIndexChanged
    '    If cmb_titulo.SelectedIndex = -1 Then
    '        btn_agregar.Enabled = False
    '    Else
    '        btn_agregar.Enabled = True
    '    End If
    'End Sub
End Class